// 接收一个对象作为参数
// 返回值是一个Promise对象
// 根据传入的参数，选择不同的请求方式和请求地址

const myAxios = function (config) {
    return new Promise((resolve, reject) => {
        // console.log(config);

        const { method, url, data, params } = config

        //1.创建一个xhr对象
        const xhr = new XMLHttpRequest()

        //先判断是get请求还是post请求

        if (method.toUpperCase() === 'GET') {
            //处理查询字符串
            const str = setParams(params)

            //2.调用open方法
            xhr.open('GET', params ? url + '?' + str : url)

            //3.调用send方法
            xhr.send()
        } else {
            //2.调用open方法
            xhr.open('POST', url)

            let flag = Object.prototype.toString.call(data) === '[object Object]'

            //3.先设置请求头
            xhr.setRequestHeader(
                'Content-Type',
                flag ? 'application/json' : 'application/x-www-form-urlencoded'
            )

            //4.调用send方法
            xhr.send(flag ? JSON.stringify(data) : data)
        }

        //4.监听xhr的状态
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                if (xhr.status >= 200 && xhr.status < 300) {
                    //将请求的结果给到成功的结果
                    resolve(JSON.parse(xhr.responseText))
                } else {
                    reject('请求失败，失败的状态码是' + xhr.status)
                }
            }
        }
    })
}

function setParams(obj) {
    //准备一个空数组容器
    const arr = []

    //遍历对象
    for (let key in obj) {
        let str = key + '=' + obj[key]
        arr.push(str)
    }

    return arr.join('&')
}